///
// * jdbm LICENSE v1.00
// *
// * Redistribution and use of this software and associated documentation
// * ("Software"), with or without modification, are permitted provided
// * that the following conditions are met:
// *
// * 1. Redistributions of source code must retain copyright
// *    statements and notices.  Redistributions must also contain a
// *    copy of this document.
// *
// * 2. Redistributions in binary form must reproduce the
// *    above copyright notice, this list of conditions and the
// *    following disclaimer in the documentation and/or other
// *    materials provided with the distribution.
// *
// * 3. The name "jdbm" must not be used to endorse or promote
// *    products derived from this Software without prior written
// *    permission of Cees de Groot.  For written permission,
// *    please contact cg@cdegroot.com.
// *
// * 4. Products derived from this Software may not be called "jdbm"
// *    nor may "jdbm" appear in their names without prior written
// *    permission of Cees de Groot.
// *
// * 5. Due credit should be given to the jdbm Project
// *    (http://jdbm.sourceforge.net/).
// *
// * THIS SOFTWARE IS PROVIDED BY THE ndbm PROJECT AND CONTRIBUTORS
// * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
// * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
// * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
// * CEES DE GROOT OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
// * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
// * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
// * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
// * OF THE POSSIBILITY OF SUCH DAMAGE.
// *
// * Copyright 2000 (C) Cees de Groot. All Rights Reserved.
// * Contributions are Copyright (C) 2000 by their associated contributors.
// *
// 


//*************************************************************************
//**  Included in JDMB 1.0 port to SharpDBM;  11/2013 Cyrus Neah cneah@codingreal.com
//**  SharpDBM is an independent reimplementation of the JDBM 1.0 software library  
//*************************************************************************


using System;


using SharpDBM;
using SharpDBM.recman;
using SharpDBM.helper;
using SharpDBM.btree;
using NUnit.Framework;



namespace SharpDBM.Test

.btree
{
	
	using System.IO;    
///
// * Test BTree insert performance.
// 
	[TestFixture]
	public class TestInsertPerf
	{

		internal int _numberOfObjects=10;

		

 
//
		[Test]
 public virtual void insert()
		{

			BTree btree;
			RecordManager recman;
			long Start, finish;
			 

			 
			recman = RecordManagerFactory.createRecordManager("TestInsertPref-" + System.DateTime.Now.Millisecond );
			btree = BTree.createInstance(recman,new LongComparator());

		// Note:  One can use specialized serializers for better performance / database size
		// btree = BTree.createInstance( recman, (long)Comparator(),
		//                               LongSerializer.INSTANCE, IntegerSerializer.INSTANCE );

			Start = System.DateTime.Now.Millisecond;
			for (int i = 0; i < _numberOfObjects; i++)
			{
				btree.insert((long)i, (int)(i), false);
			}
			recman.commit();
			finish = System.DateTime.Now.Millisecond;

			Console.WriteLine("It took " + (finish - Start) + " ms to insert " + _numberOfObjects +" objects.");

		}


		static void Main(string[] args)
		{
			if (args.Length != 1)
			{
				Console.WriteLine("Usage:  TestInsertPerf [numberOfObjects]");
				return;
			}
			int numberOfObjects = Convert.ToInt32(args[0]);
			TestInsertPerf test = new TestInsertPerf();
			try
			{
				test.insert();
			}
			catch (IOException except)
			{
				Console.WriteLine(except.StackTrace);
				
			}
		}

	}

}